package se.quiz.cliente.controller;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Random;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import se.quiz.bean.Pergunta;
import se.quiz.cliente.Inicial;
import se.quiz.cliente.conexao.HttpManager;
import se.quiz.cliente.conexao.PacoteRequisicao;
import android.os.AsyncTask;
import android.util.Base64;
import android.util.Log;

public class Jogo{

	private ArrayList<Pergunta> perguntas = new ArrayList<Pergunta>();
	private boolean rodando;
	private int rodadas;
	private int controleRodadas = 0;
	private ArrayList<Integer> sequenciaQuiz ;
	private ArrayList<Integer> sequenciaAlternativas ;
	private Random random = new Random();
	private KitQuiz kitQuiz;
	private int quantidadeDeQuiz = 5;
	
	public Jogo(ArrayList<Pergunta> perguntas){		
		this.perguntas = perguntas;
		this.kitQuiz = new KitQuiz();
		inicializar();
	}
	
	public void inicializar(){	
		Log.i("estado","inicializando");
		setarRodadas();		
		construirSequenciaDeQuiz();
		construirQuiz();
		rodando = true;
	}
		
	private void construirQuiz() {
		long id = 1;
		for (Integer in : sequenciaQuiz) {
			Quiz q = new Quiz(id);
			q.setFoto(perguntas.get(in).arrayToBitmap(perguntas.get(in).getFoto()));
			q.setPergunta(perguntas.get(in).getPergunta());	
			String[] alternativas = perguntas.get(in).getAlternativasArray();
			String alternativasTemp = "";
			construirSequenciaDeAlternativas(alternativas.length);
			for (Integer ins : sequenciaAlternativas) {
				alternativasTemp = alternativasTemp+"|"+alternativas[ins];
			}
			
			alternativasTemp = alternativasTemp.substring(1);
			String[] alts = alternativasTemp.split("\\|");
			q.setAlternativas(alts);
			
			q.setResposta(perguntas.get(in).getResposta());			

			
			kitQuiz.addQuiz(q);
			
			id++;
		}
	}

	private void construirSequenciaDeAlternativas(int max){
		LinkedHashSet<Integer> seqw =new LinkedHashSet<Integer>();
		seqw.add(aleatorioSequenciaAlternativas(max));	
		while(seqw.size() < max){
			seqw.add(aleatorioSequenciaAlternativas(max));
		}
		sequenciaAlternativas = new ArrayList<Integer>(seqw);
	}
	
	
	
	public KitQuiz getKitQuiz() {
		return kitQuiz;
	}

	private void construirSequenciaDeQuiz() {
		LinkedHashSet<Integer> seq =new LinkedHashSet<Integer>();		
		seq.add(aleatorioSequencia());		
		while(seq.size() < rodadas){
			seq.add(aleatorioSequencia());
		}
		sequenciaQuiz = new ArrayList<Integer>(seq);
	}
	private int aleatorioSequenciaAlternativas(int max){
		int i = max * 1000;
		i = random.nextInt(i);
		return i/1000;
	}
	private int aleatorioSequencia(){
		int i = perguntas.size()*1000;
		i = random.nextInt(i);
		
		return i/1000;
	}
	
	public int getRodadas(){
		return rodadas;
	}
	public int aleatorioResposta(Pergunta pergunta){		
		return random.nextInt(pergunta.getAlternativasArray().length);
	}
	private void setarRodadas(){
		if(perguntas.size()<10){
			rodadas = perguntas.size();
		}else{
			rodadas = quantidadeDeQuiz;
		}
	}

	public boolean isRodando() {
		return rodando;
	}

	public int getControleRodadas() {
		return controleRodadas;
	}
	
}
